package main

/**
95_接口
接口定义了一个对象的行为规范，只定义规范，不实现，由具体的对象来实现规范的细节。
接口是一种类型：
在 Go 语言中 interface 是一种类型，一种抽象的类型。
为什么要使用接口？
接口区别于我们之前所有的具体类型，接口是一种抽象的类型。当你看到一个接口类型的值时，
你不知道它是什么，唯一知道的是通过它的方法能做什么。
接口的定义：
Go语言提倡面向接口编程。
	1.接口是一个或多个方法的签名的集合
	2.任何类型的方法集中只要拥有该接口对应的全部方法签名，就表示它“实现”了该接口，
	  无需在该类型上显示声明实现了哪个接口。这称为 Structural Typing.
	3.所谓对应方法，是指具有相同名称、参数列表（不包含参数名）以及返回值。
	4.当然该类型还可以有其他方法
注意：
	1.接口只有方法声明，没有实现，没有数据字段。
	2.接口可以匿名嵌入其它接口，或嵌入到结构中。
	3.对象赋值给接口时，会发生拷贝，而接口内部存储的是指向这个复制品的指针，即无法修改复制品的状态，也无法获取指针。
	4.只有当接口存储的类型和对象都为nil的时候，接口才等于nil.
	5.接口调用不会做receiver 的自动转换
	6.接口同样支持匿名字段方法。
	7.接口也可以实现类似OOP中的多态。
	8.空接口可以作为任何类型数据的容器。（类似java中的Object）
	9.一个类型可以实现多个接口
	10.接口命名习惯以er 结尾

接口定义的语法：
每个接口由数个方法组成，接口的定义格式如下：
 type 接口类型名 interface{
     方法名1( 参数列表1 ) 返回值列表1
     方法名2( 参数列表2 ) 返回值列表2
     …
 }
	其中：
		1.接口名：使用type将接口定义为自定义的类型名。Go语言的接口在命名的时候，一般会在单词后面加上er，接口名最好能突出该接口类型含义
		2.方法名：当方法名首字母是大写的且这个接口类型名首字母也是大写是，这个方法可以被接口所在的包（package）之外的代码访问。
		3.参数列表：返回值列表：参数列表和返回值列表中的参数变量名可以省略。


实现接口的条件
一个对象只要实现了接口中的全部方法，那么就实现了这个接口。换句话说，接口就是一个需实现的方法列表。
*/

func main() {

}
